/**
 * JQuery UI autocomplete 搜索自动提示，支持回车(enter)、鼠标点击事件进行选择。
 *
 * @param inputId input 输入框 ID
 * @param buttonId 提交按钮 ID
 * @param data 数据，格式：{"typeName":"基金","name":"新华优选成长","code":"519089","type":"fund","spell":"xhyxcz"}
 * @param isShow 是否在输入框中显示选中项 (非必输项)
 */
function autocomplete(inputId,buttonId,data,isShow) {
    $("#"+inputId).on("autocompleteselect", function(event, ui) {
        //解决firefox中不支持回车打开窗口(window.open) 被禁用问题
        if(event.keyCode != $.ui.keyCode.ENTER || (!$.browser.mozilla)){
            if($("#"+buttonId))
                $("#"+buttonId).click();
        }
        if(isShow){
            return isShow;
        }else{
            return false;
        }
    });

    //widget关闭，input获得焦点时打开搜索框
    $("#"+inputId).focus(function(event) {
        if(!$("#"+inputId).autocomplete( "widget" ).is( ":visible" )){
            $("#"+inputId).autocomplete( "search", $("#"+inputId).val() );
        }
    });

    var isMatch = false;
    $("#" + inputId).autocomplete({
        delay: 0,
        minLength: 0,
        autoFocus: true,
        source: function(request, response) {
            var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i");
            var index=0;
            var match = "";
            var tempArray = $.grep(data,
                function(item) {
                    if(item.type == "Fund"){
                        match = matcher.test(item.code) || matcher.test(item.spell) || matcher.test(item.name) || matcher.test(item.alias1) || matcher.test(item.alias2) || matcher.test(item.alias3) ;
                    }else{
                        match = matcher.test(item.code) || matcher.test(item.name) || matcher.test(item.spell);
                    }
                    if(match){
                        if(index>=10) return;//可显示条数
                        index++;
                        return true;
                    }
                    return false;
                });
            isMatch = (tempArray.length>0);
            if(request.term.length<=0){
                response();
            }else if (!isMatch) {
                response([{
                    code: "",
                    label: "",
                    spell: "",
                    spellAll: "",
                    type: "misMatch",
                    typeName: "未找到符合条件的结果"
                }]);
            } else {
                var sourceStr = new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + $.ui.autocomplete.escapeRegex(request.term) + ")(?![^<>]*>)(?![^&;]+;)", "gi");
                tempArray.push({
                    code: "",
                    label: "",
                    spell: "",
                    spellAll: "",
                    type: "all",
                    typeName: "查看全部"
                });
                response($.map(tempArray,
                    function(item) {
                        return {
                            code: item.code,
                            label: item.name,
                            spell: item.spell,
                            spellAll: item.spellAll,
                            codeStr: (item.code && (!request.term || matcher.test(item.code))) ? item.code.replace(sourceStr, "<strong>$1</strong>") : item.code,
                            nameStr: (item.name && (!request.term || matcher.test(item.name))) ? item.name.replace(sourceStr, "<strong>$1</strong>") : item.name,
                            spellStr: (item.spell && (!request.term || matcher.test(item.spell))) ? item.spell.replace(sourceStr, "<strong>$1</strong>") : item.spell,
                            type: item.type,
                            typeName: item.typeName
                        };
                    }));
            }
        },
        create: function(event, ui) {
            $(".ui-helper-hidden-accessible").remove(); //当前可选条数，暂移除
        },
        focus: function(event, ui) {
            $("#"+inputId).attr("code",ui.item.code);
            $("#"+inputId).attr("category",ui.item.type);
            $("#"+inputId).attr("label",ui.item.label);
            $("#"+inputId).attr("spell",ui.item.spell);
            $("#"+inputId).attr("spellAll",ui.item.spellAll);
            return false;
        }
    }).data("autocomplete")._renderItem = function(ul, item) {
        if (item.type === 'all' || item.type === 'misMatch') {
            return $("<li>").data("item.autocomplete", item).append("<a class='auto-view-all'>" + item.typeName + "</a>").appendTo(ul);
        } else {
            return $("<li>").data("item.autocomplete", item).append("<a><span style='width:18%;'>" + item.codeStr + "</span><span style='width:22%;'>" + item.spellStr + "</span><span style='width:36%;'>" + item.nameStr + "</span><span style='width:16%;color:#999;text-align:center;'>" + item.typeName + "</span></a>").appendTo(ul);
        }
    };
}


/**
 * 基金购买、定投搜索框
 * JQuery UI autocomplete 搜索自动提示，支持回车(enter)、鼠标点击事件进行选择。
 *
 * @param inputId input 输入框 ID
 * @param buttonId 提交按钮 ID
 * @param isShow 是否在输入框中显示选中项 (非必输项)
 * @param inclusions 搜索结果中可选择的业务类型，多个类务类型用逗号隔开. 1：购买、2：定投、3：未代销、4：暂停
 */
function searchFundCmp(inputId,buttonId,isShow,inclusions) {
    data = window.funds;//引用自：/trade/funds.js
    if(inclusions){
        inclusions = inclusions.split(',');
    }

    $("#"+inputId).blur("autocompleteselect",function(){
        if(window.searchResults.length > 1 && $("#"+inputId) && $("#"+inputId).val()==window.searchResults[1].code ){
            var item = window.searchResults[1];
            $("#"+inputId).val(item.code);
            $("#"+inputId).attr("code",item.code);
            $("#"+inputId).attr("category",item.type);
            $("#"+inputId).attr("label",item.name);
            $("#"+inputId).attr("spell",item.spell);
            $("#"+inputId).attr("fundType",item.fundType);
            $("#"+inputId).attr("bizType",item.bizType);

            if($("#"+buttonId))
                $("#"+buttonId).click();
            if(isShow){
                return isShow;
            }else{
                return false;
            }
        }
    });
    $("#"+inputId).on("autocompleteselect", function(event, ui) {
        //解决firefox中不支持回车打开窗口(window.open) 被禁用问题
        if(ui.item.typeName=='表头' && window.searchResults.length > 1 && event.keyCode == $.ui.keyCode.ENTER){
            ui.item = window.searchResults[1];
            $("#"+inputId).val(ui.item.code);
            $("#"+inputId).attr("code",ui.item.code);
            $("#"+inputId).attr("category",ui.item.type);
            $("#"+inputId).attr("label",ui.item.name);
            $("#"+inputId).attr("spell",ui.item.spell);
            $("#"+inputId).attr("fundType",ui.item.fundType);
            $("#"+inputId).attr("bizType",ui.item.bizType);
        }
        if($("#"+buttonId))
            $("#"+buttonId).click();
        if(isShow){
            return isShow;
        }else{
            return false;
        }
    });
    //如果是 firefox 不支持回车打开窗口(window.open)，但支持绑定input的keypress事件，并在input中回车时触发button click事件,在click事件中window.open
    if($.browser.mozilla){
        $("#"+inputId).keypress(function(event) {
            if ( event.keyCode === 13) {
                if($("#"+buttonId))$("#"+buttonId).click();
            }
        });
    }
    //widget关闭，input获得焦点时打开搜索框
    $("#"+inputId).click(function(event) {
        if(!$("#"+inputId).autocomplete( "widget" ).is( ":visible" )){
            $("#"+inputId).autocomplete( "search", $("#"+inputId).val() );
        }
    });

    var isMatch = false;
    $("#" + inputId).autocomplete({
        delay: 0,
        minLength: 0,
        autoFocus: true,
        source: function(request, response) {
            var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i");
            var pattern = inclusions?inclusions+',3,4':inclusions;
            var bizTypeMatcher = pattern? new RegExp(pattern.replace(/,/g,'|'), "i") : new RegExp(".", "i");
            var index=0;
            var match = "";
            var tempArray = $.grep(data,
                function(item) {
                    if(item.type == "Fund"){
                        match = matcher.test(item.code) || matcher.test(item.spell) || matcher.test(item.name) || matcher.test(item.alias1) || matcher.test(item.alias2) || matcher.test(item.alias3) ;
                    }else{
                        match = matcher.test(item.code) || matcher.test(item.name) || matcher.test(item.spell);
                        //1：购买、2：定投、3：未代销、4：暂停
                        match = match ? bizTypeMatcher.test(item.bizType):match;
                    }
                    if(match){
                        if(index>=10) return;//可显示条数
                        index++;
                        return true;
                    }
                    return false;
                });
            isMatch = (tempArray.length>0);
            if(request.term.length<=0){
                response();
            }else if (!isMatch) {
                response([{
                    code: "",
                    label: "",
                    spell: "",
                    spellAll: "",
                    type: "misMatch",
                    typeName: "抱歉，你输入的内容，目前不存在"
                }]);
            } else {

                tempArray.unshift({
                    code: "",
                    label: "",
                    spell: "",
                    spellAll: "",
                    type: "title",
                    typeName: "表头"
                });

                var sourceStr = new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + $.ui.autocomplete.escapeRegex(request.term) + ")(?![^<>]*>)(?![^&;]+;)", "gi");
                /*tempArray.push({
                 code: "",
                 label: "",
                 spell: "",
                 spellAll: "",
                 type: "all",
                 typeName: "查看全部"
                 });*/
                window.searchResults = tempArray;
                response($.map(tempArray,
                    function(item) {
                        return {
                            code: item.code,
                            label: item.name,
                            spell: item.spell,
                            spellAll: item.spellAll,
                            codeStr: (item.code && (!request.term || matcher.test(item.code))) ? item.code.replace(sourceStr, "<strong>$1</strong>") : item.code,
                            nameStr: (item.name && (!request.term || matcher.test(item.name))) ? item.name.replace(sourceStr, "<strong>$1</strong>") : item.name,
                            spellStr: (item.spell && (!request.term || matcher.test(item.spell))) ? item.spell.replace(sourceStr, "<strong>$1</strong>") : item.spell,
                            type: item.type,
                            typeName: item.typeName,
                            bizType: item.bizType,
                            fundType:item.fundType
                        };
                    }));
            }
        },
        create: function(event, ui) {
            $(".ui-helper-hidden-accessible").remove(); //当前可选条数，暂移除
        },
        focus: function(event, ui) {
            $("#"+inputId).attr("code",ui.item.code);
            $("#"+inputId).attr("category",ui.item.type);
            $("#"+inputId).attr("label",ui.item.label);
            $("#"+inputId).attr("spell",ui.item.spell);
            //$("#"+inputId).attr("spellAll",ui.item.spellAll);
            $("#"+inputId).attr("fundType",ui.item.fundType);
            $("#"+inputId).attr("bizType",ui.item.bizType);
            return false;
        }
    }).data("autocomplete")._renderItem = function(ul, item) {


        if (item.type === 'all' || item.type === 'misMatch') {
            return $("<li>").data("item.autocomplete", item).append("<a class='auto-view-all'>" + item.typeName + "</a>").appendTo(ul);
        }else if(item.type === 'title'){
            return $("<li>").data("item.autocomplete", item).append("<a class='title'><span style='width:15%;'>" + '代码' + "</span><span style='width:16%;'>" + '简拼' + "</span><span style='width:35%;'>" + '简称' + "</span><span style='width:10%;'>" + '类型' + "</span><span style='width:16%;text-align:center;padding-left: 0;'>"+'支持业务'+"</span></a>").appendTo(ul);
        } else {
            if(inclusions){
                var bizTypes = item.bizType.split(',');
                //如果有交集，得到第一项业务类型
                var bizType = intersection(inclusions, bizTypes);
                if(bizType){
                    item.bizType = bizType;
                }else{
                    //无交集
                    return $("<li>").data("item.autocomplete", item).append("<a><span style='width:15%;'>" + item.codeStr + "</span><span style='width:16%;'>" + item.spellStr + "</span><span style='width:35%;'>" + item.nameStr + "</span><span style='width:10%;'>" + getFundType(item.fundType) + "</span><span style='width:15%;text-align:center;color:#999;'>"+getBizTypeName(item.bizType)+"</span></a>").appendTo(ul);
                }
            }

            return $("<li>").data("item.autocomplete", item).append("<a><span style='width:15%;'>" + item.codeStr + "</span><span style='width:16%;'>" + item.spellStr + "</span><span style='width:35%;'>" + item.nameStr + "</span><span style='width:10%;'>" + getFundType(item.fundType) + "</span><span style='width:15%;text-align:center;'>"+getBizTypeName(item.bizType)+"</span></a>").appendTo(ul);
        }
    };
}

function getFundType(type){
    return window.fundTypeJson[type];//引用自common.js
}

function getBizTypeName(bizType){
    if(bizType.indexOf(',') == -1){

        //1：购买、2：定投、3：未代销、4：暂停
        if(bizType == '1'){
            return '购买';
        }else if(bizType == '2'){
            return '定投';
        }else if(bizType == '3'){
            return '未代销';
        }else if(bizType == '4'){
            return '暂停';
        }

    }else{
        var types = bizType.split(',');
        var typename='';
        for(var i=0; i<types.length; i++){
            if(types[i] == '1' || types[i] == '2'){
                continue;
            }
            if(i != 0){
                typename += typename == '' ? '' : '|';
            }
            typename += getBizTypeName(types[i]);
        }
        return typename;
    }

}

function intersection(a,b){
    for(var i=0; i<a.length; i++){
        for(var j=0; j<b.length; j++){
            if(b[j] == a[i]){
                return a[i];
            }
        }
    }
    return null;
}

/**
 * 打开(jquery UI autocomplete)选择的基金
 *
 * @param inputId  输入框input的id
 * @param searchType 一级类目 {1:产品,2:公司,3:经理,4资讯}
 * @param subType 子页面类型 (非必输项)
 */
function openItem(inputId,searchType,subType){
    var code = $("#"+inputId).attr("code");
    var category = $("#"+inputId).attr("category");
    var spellAll = $("#"+inputId).attr("spellAll");
    var url = '';
    if (category === 'all' || category === undefined) {
        url = main_host+'/search/quicksearch.htm?skey=' + encodeURI($("#"+inputId).val()) + '&searchType='+ searchType;
    } else if(category ==='Fund') {
        url = main_host+'/fund/' + code + "/";
    } else if(category ==='FundManager') {
        url = main_host+ '/fund/manager/' + code + "/";
    } else if(category ==='FundCompany') {
        url = main_host+'/fund/company/' + code + "/";
    } else if(category ==='PFund') {
        if(subType===undefined || subType.length<=0)subType="";
        url = simu_host+'/'+spellAll+'/' + code +'/'+subType;
    } else if(category ==='CPFund') {
        url = simu_host+'/overseas/' + code + '.html';
    } else if(category ==='PFundManager') {
        url = simu_host+'/manager/' + code + '.html';
    } else if(category ==='PFundCompany') {
        if(spellAll!==undefined && spellAll.length<=0)return;
        url = simu_host+'/' + spellAll + "/";
    }
    if(code!==undefined && code.length<=0 && category != 'all')return;
    window.open(url);
}
